package com.design.factory;

import com.design.factory.impl.Chassis;
import com.design.factory.impl.Steer;
import com.design.factory.impl.Tire;

/**
 * 汽车工厂
 * 工厂模式主要三部分构成：接口类、实现类和工厂
 * 接口类：对所有实现类进行提取，抽取公共部分为接口类
 * 实现类：集成接口类，并对自己独特部分进行实现
 * 工厂类：对外返回统一的接口类，依据不同的类型返回不同的实现类
 * 使用场景：需要对同一大类下面的各个小类进行不同的处理，比如我们案例中一个汽车工厂，有轮胎生产班组、方向盘生产班组和底盘生产班组，
 * 在工厂中每个班组负责各自模块进行生产操作，这种情况下我们可以通过工厂模式进行实现
 * @author ytj
 * @date 2024/11/27 13:49
 */
public class CarFactory {
    /**
     * 工厂类获取汽车零部件服务
     * */
    public ICar getCarService(Integer type){
        if(type==1){
            return new Tire();
        }else if(type==2){
            return new Steer();
        }else if(type==3){
            return new Chassis();
        }
        throw new RuntimeException("改班组在工厂中不存在");
    }

    public static void main(String[] args) {
        CarFactory carFactory=new CarFactory();
        ICar carService = carFactory.getCarService(1);
        System.out.println(carService.product());
        carService = carFactory.getCarService(2);
        System.out.println(carService.product());
        carService=carFactory.getCarService(3);
        System.out.println(carService.product());
    }
}
